Routing এবং Navigation দুটি গুরুত্বপূর্ণ ধারণা, যা ওয়েব এবং মোবাইল অ্যাপ্লিকেশন ডেভেলপমেন্টে ব্যবহৃত হয়। এগুলি অ্যাপ্লিকেশনের ইউজার ইন্টারফেসে কন্টেন্ট এবং পেজের মধ্যকার মুভমেন্ট এবং নেভিগেশন প্রক্রিয়া নির্ধারণ করে।
Routing (রাউটিং)
Routing হল একটি প্রক্রিয়া, যা অ্যাপ্লিকেশনের URL এবং UI কম্পোনেন্টের মধ্যে সম্পর্ক স্থাপন করে। এটি ব্যবহারকারীর ক্লিক বা অন্য কোনো অ্যাকশনের মাধ্যমে অ্যাপ্লিকেশনটির বিভিন্ন পৃষ্ঠায় বা ভিউতে নেভিগেট করার সুবিধা প্রদান করে। Routing-এর মাধ্যমে সার্ভার বা ক্লায়েন্ট সাইডে পেজ রেন্ডার হয় এবং URL-এর পরিবর্তন অনুসারে অ্যাপ্লিকেশন সঠিকভাবে রেসপন্স করে।
Routing এর কাজ কী?
- URL প্যাটার্নের মাধ্যমে সঠিক কম্পোনেন্ট বা পেজ রেন্ডার করা।
 - অ্যাপ্লিকেশনের বিভিন্ন ভিউ বা পৃষ্ঠার জন্য সঠিক রাউট তৈরি করা।
 - ব্যবহারকারীর আউটপুট বা অ্যাকশন অনুসারে URL পরিবর্তন করা।
 
Routing এর উদাহরণ:
ধরা যাক, একটি ব্লগ অ্যাপ্লিকেশন যেখানে তিনটি পৃষ্ঠা রয়েছে: Home, About, এবং Contact। এদের মধ্যে নেভিগেট করার জন্য বিভিন্ন রাউট ব্যবহার করা হয়:
/→ Home পেজ/about→ About পেজ/contact→ Contact পেজ
এখানে, রাউটিং একটি নির্দিষ্ট URL প্যাটার্নের মাধ্যমে সঠিক পেজ বা কম্পোনেন্ট রেন্ডার করে।
Routing Types:
- Client-Side Routing:
ক্লায়েন্ট সাইড রাউটিং ব্যবহার করে, যেখানে অ্যাপ্লিকেশনটি ব্রাউজারের মধ্যে রেন্ডার হয় এবং সার্ভারের প্রতি HTTP রিকোয়েস্ট পাঠানো হয় না। React Router বা Vue Router এর মতো লাইব্রেরি এই রাউটিং পদ্ধতিতে ব্যবহৃত হয়। - Server-Side Routing:
সার্ভার সাইড রাউটিং ব্যবহৃত হয় যখন অ্যাপ্লিকেশনটি সার্ভার থেকে পেজ রেন্ডার করে। ওয়েব সার্ভার প্রতি পেজ রিকোয়েস্টের জন্য নির্দিষ্ট পেজ সরবরাহ করে। Express.js এবং Django এই ধরনের রাউটিং ব্যবহৃত করে। 
Navigation (নেভিগেশন)
Navigation হল অ্যাপ্লিকেশনের ভিতরে বিভিন্ন ভিউ, পৃষ্ঠা বা সেকশনের মধ্যে মুভমেন্ট বা পটভূমি পরিবর্তন করা। এটি সাধারণত ইউজার ইন্টারফেসে "ব্যাক", "ফরওয়ার্ড", "হোম", "মেনু" ইত্যাদি বাটন বা লিঙ্কের মাধ্যমে ঘটে। Navigation মূলত অ্যাপ্লিকেশন বা ওয়েবসাইটের ব্যবহারকারী অভিজ্ঞতার অংশ, যা ইউজারকে অ্যাপ্লিকেশনটির বিভিন্ন অংশে দ্রুত প্রবেশ করতে সাহায্য করে।
Navigation এর কাজ কী?
- ইউজারকে সহজে অ্যাপ্লিকেশন বা ওয়েবসাইটের মধ্যে বিভিন্ন অংশে নিয়ে যাওয়া।
 - ইউজারের জন্য সহজে অ্যাক্সেসযোগ্য লিঙ্ক বা বাটন সরবরাহ করা।
 - পেজ রিফ্রেশ বা রাউট পরিবর্তন না করেই নতুন কন্টেন্ট শো করা।
 
Navigation এর উদাহরণ:
ধরা যাক, একটি ই-কমার্স অ্যাপ্লিকেশন যেখানে প্রোডাক্ট পেজ, কার্ট পেজ, চেকআউট পেজ রয়েছে। ইউজার যদি একটি প্রোডাক্টে ক্লিক করে, তখন তাকে প্রোডাক্টের বিস্তারিত পেজে নেওয়া হয়, যা navigation এর মাধ্যমে পরিচালিত হয়।
Navigation Types:
- Internal Navigation:
অ্যাপ্লিকেশনের ভিতরে বিভিন্ন পৃষ্ঠা বা সেকশনের মধ্যে নেভিগেট করা। যেমন, ড্রপডাউন মেনু, সাইডবার নেভিগেশন, ট্যাব নেভিগেশন ইত্যাদি। - External Navigation:
অ্যাপ্লিকেশনের বাইরে অন্য পেজ বা ওয়েবসাইটে নেভিগেট করা। যেমন, হাইপারলিঙ্ক বা কাস্টম URL। 
Routing এবং Navigation এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Routing | Navigation | 
|---|---|---|
| কাজ | URL বা পৃষ্ঠার সঠিক পাথ নির্বাচন করা | অ্যাপ্লিকেশনের ভিতরে বিভিন্ন অংশে নেভিগেট করা | 
| কোডিং পদ্ধতি | রাউট সিস্টেম এবং URL প্যাটার্নের মাধ্যমে | ইউজার ইন্টারফেসে ক্লিকেবল লিঙ্ক বা বাটনের মাধ্যমে | 
| উদ্দেশ্য | বিভিন্ন পৃষ্ঠার মধ্যে সঠিক রাউট তৈরি করা | সহজভাবে অ্যাপ্লিকেশন বা ওয়েবসাইটে মুভমেন্ট করা | 
| উদাহরণ | /home, /about রাউট | সাইডবার, মেনু, ট্যাব ইত্যাদি | 
সারাংশ
Routing এবং Navigation দুইটি গুরুত্বপূর্ণ ধারণা যা ওয়েব এবং মোবাইল অ্যাপ্লিকেশনের ব্যবহারে অত্যন্ত প্রয়োজনীয়। Routing ব্যবহারকারীকে নির্দিষ্ট URL বা পাথ অনুসারে সঠিক পেজে নিয়ে যায়, আর Navigation ব্যবহারকারীকে অ্যাপ্লিকেশনের ভেতরে বিভিন্ন সেকশনে নেভিগেট করতে সাহায্য করে। এই দুটি বিষয় অ্যাপ্লিকেশনের ইউজার অভিজ্ঞতা উন্নত করার জন্য অত্যন্ত কার্যকর।
Iron Router:
Iron Router হল Meteor-এ ব্যবহৃত একটি জনপ্রিয় রাউটিং লাইব্রেরি যা অ্যাপ্লিকেশনটির বিভিন্ন রাউট এবং পেজ পরিচালনা করার জন্য ব্যবহৃত হয়। এটি একটি কাস্টম রাউটিং সিস্টেম সরবরাহ করে যা অ্যাপ্লিকেশনটির ক্লায়েন্ট এবং সার্ভারের জন্য রাউটিং পরিচালনা করে।
Iron Router এর বৈশিষ্ট্য:
- Dynamic URL Matching: Iron Router URL এর প্যাটার্ন অনুযায়ী ডাইনামিক রাউটিং সাপোর্ট করে। উদাহরণস্বরূপ, URL এর মধ্যে পরিবর্তনশীল অংশ ব্যবহার করা যেতে পারে।
 - Route Handler Functions: প্রতিটি রাউটের জন্য একটি handler function নির্ধারণ করা যায়, যা রাউটটি ট্রিগার হওয়ার পরে কার্যকর হয়।
 - Filters: Iron Router রাউটের জন্য filters সেটআপ করতে দেয়, যেমন যদি একটি রাউট অ্যাক্সেস করার আগে লগইন চেক করতে হয়।
 - Server-side Rendering (SSR): Iron Router সার্ভার সাইড রেন্ডারিং সমর্থন করে, যেটি SEO এর জন্য গুরুত্বপূর্ণ।
 
Iron Router সেটআপ উদাহরণ:
// ক্লায়েন্ট সাইড রাউটিং
Router.route('/', function() {
  this.render('home');
});
// একটি ডাইনামিক রাউট
Router.route('/post/:_id', function() {
  var postId = this.params._id;
  this.render('postDetail', {
    data: function() {
      return Posts.findOne(postId);
    }
  });
});
এখানে, প্রথম রাউটে / (হোম পেজ) এ ক্লিক করলে home টেমপ্লেট রেন্ডার হবে এবং দ্বিতীয় রাউটে একটি ডাইনামিক প্যারামিটার :_id ব্যবহার করা হয়েছে যা Posts ডাটাবেস থেকে পোস্টের বিস্তারিত তথ্য প্রদর্শন করবে।
Flow Router:
Flow Router হল Meteor এর একটি লাইটওয়েট এবং দ্রুত রাউটিং লাইব্রেরি যা অ্যাপ্লিকেশন রাউটিং ব্যবস্থাপনা করার জন্য ব্যবহৃত হয়। এটি Iron Router থেকে অনেক বেশি পারফরম্যান্স-অরিয়েন্টেড এবং সরল।
Flow Router এর বৈশিষ্ট্য:
- Minimalistic & Lightweight: Flow Router Iron Router এর তুলনায় অনেক বেশি হালকা এবং কম জটিল।
 - Sync & Async Routing: Flow Router sync এবং async উভয় ধরনের রাউটিং সাপোর্ট করে, যেখানে আপনি রাউটিংয়ের আগে অ্যাসিনক্রোনাস ডেটা লোড করতে পারেন।
 - URL Parameters: এটি URL প্যারামিটার এবং কুয়েরি প্যারামিটারদের সাপোর্ট করে।
 - SSR (Server-Side Rendering) সমর্থন: Flow Router-এ সার্ভার সাইড রেন্ডারিং সমর্থন করা যায়।
 
Flow Router সেটআপ উদাহরণ:
// ক্লায়েন্ট সাইড রাউটিং
FlowRouter.route('/', {
  action: function() {
    BlazeLayout.render('mainLayout', { content: 'home' });
  }
});
// একটি ডাইনামিক রাউট
FlowRouter.route('/post/:_id', {
  action: function(params) {
    var postId = params._id;
    BlazeLayout.render('mainLayout', { content: 'postDetail' });
    // পোস্ট ডেটা ফেচ করা
    var post = Posts.findOne(postId);
    console.log(post);
  }
});
এখানে, প্রথম রাউটে / (হোম পেজ) ক্লিক করলে home টেমপ্লেট রেন্ডার হবে এবং দ্বিতীয় রাউটটি ডাইনামিক প্যারামিটার :_id ব্যবহার করছে, যেখানে পোস্টের তথ্য ফেচ করা হবে এবং তারপর postDetail টেমপ্লেট রেন্ডার হবে।
Iron Router এবং Flow Router এর মধ্যে তুলনা
| বৈশিষ্ট্য | Iron Router | Flow Router | 
|---|---|---|
| ফ্রেমওয়ার্ক | Meteor এর অফিসিয়াল রাউটিং লাইব্রেরি | লাইটওয়েট, কমপ্লেক্সিটি কম | 
| রাউটিং ক্ষমতা | ডাইনামিক URL, ফিল্টার, SSR সমর্থন | দ্রুত, সিম্পল এবং পারফরম্যান্স-অরিয়েন্টেড | 
| ডাইনামিক রাউট | সমর্থন করে | সমর্থন করে | 
| টেমপ্লেট রেন্ডারিং | this.render() ব্যবহার | BlazeLayout.render() ব্যবহার | 
| ব্যবহারকারীর ইন্টারফেস | আইডেন্টিফাইড ফিল্টার এবং গ্লোবাল হ্যান্ডলার | সোজাসুজি এবং পারফরম্যান্সে উন্নত | 
| দ্বৈত-প্ল্যাটফর্ম সাপোর্ট | হ্যাঁ, ডেস্কটপ এবং মোবাইল | হ্যাঁ, ডেস্কটপ এবং মোবাইল | 
সারাংশ
Iron Router এবং Flow Router উভয়ই Meteor অ্যাপ্লিকেশনের রাউটিং ব্যবস্থাপনা করার জন্য শক্তিশালী এবং কার্যকরী লাইব্রেরি। Iron Router একটি শক্তিশালী, ফিচার-প্যাকড লাইব্রেরি যা উন্নত ফিচার যেমন রিয়েল-টাইম ডেটা সিঙ্ক্রোনাইজেশন, ফিল্টার এবং সার্ভার সাইড রেন্ডারিং সমর্থন করে, তবে এটি কিছুটা বেশি জটিল হতে পারে। অন্যদিকে, Flow Router একটি দ্রুত এবং হালকা রাউটিং লাইব্রেরি, যা পারফরম্যান্সের দিকে বেশি মনোযোগ দেয় এবং সিম্পল রাউটিং ব্যবস্থাপনা সরবরাহ করে।
Single Page Application (SPA) হলো এমন একটি ওয়েব অ্যাপ্লিকেশন যা শুধুমাত্র একটি HTML পৃষ্ঠা লোড করে এবং ডাইনামিকভাবে কন্টেন্ট আপডেট করে, ব্যবহারকারী কোন নতুন পৃষ্ঠা লোড না করে। SPA তৈরি করার জন্য, একটি গুরুত্বপূর্ণ উপাদান হলো routing, যা ইউজারের জন্য বিভিন্ন দৃশ্য বা পৃষ্ঠার মধ্যে নেভিগেশন পরিচালনা করে। এখানে আমরা Meteor ফ্রেমওয়ার্কে SPA routing কিভাবে তৈরি করা যায় তা আলোচনা করব।
Meteor এ SPA Routing তৈরি করার জন্য প্রয়োজনীয় প্যাকেজ
- FlowRouter
FlowRouter হলো Meteor এর জন্য একটি জনপ্রিয় রাউটিং প্যাকেজ। এটি SPA নেভিগেশনের জন্য খুবই কার্যকরী এবং এটি সার্ভার-সাইড রেন্ডারিং সমর্থন করে। - React-Router (যদি React ব্যবহার করা হয়)
যদি আপনি React ব্যবহার করেন, তবে React-Router হল একটি জনপ্রিয় প্যাকেজ যা ক্লায়েন্ট সাইড রাউটিং পরিচালনা করতে ব্যবহৃত হয়। 
FlowRouter ব্যবহার করে Routing তৈরি করা
FlowRouter ইনস্টল করা:
প্রথমে FlowRouter প্যাকেজটি ইনস্টল করতে হবে। আপনি Meteor টার্মিনাল থেকে এই কমান্ডটি চালিয়ে ইনস্টল করতে পারেন:
meteor add ostrio:flow-routerরাউটিং কনফিগারেশন:
FlowRouter ব্যবহার করে রাউটিং কনফিগার করতে হবে। নিচে একটি উদাহরণ দেওয়া হল:
import { FlowRouter } from 'meteor/ostrio:flow-router'; // রাউট তৈরি করা FlowRouter.route('/', { action() { // এখানে যেকোনো React বা Blaze টেমপ্লেট রেন্ডার করতে পারেন console.log("Home page"); }, }); FlowRouter.route('/about', { action() { console.log("About page"); }, }); FlowRouter.route('/contact', { action() { console.log("Contact page"); }, });এখানে, আমরা তিনটি রাউট তৈরি করেছি:
- '/' - হোম পৃষ্ঠা
 - '/about' - অ্যাবাউট পৃষ্ঠা
 - '/contact' - কন্টাক্ট পৃষ্ঠা
 
React কম্পোনেন্ট রেন্ডার করা:
আপনি যদি React ব্যবহার করেন, তবে রাউটের action ফাংশনে React কম্পোনেন্ট রেন্ডার করতে পারেন:
import { FlowRouter } from 'meteor/ostrio:flow-router'; import React from 'react'; import ReactDOM from 'react-dom'; import HomePage from './HomePage'; // আপনার React কম্পোনেন্ট FlowRouter.route('/', { action() { ReactDOM.render(<HomePage />, document.getElementById('app')); }, });
React-Router ব্যবহার করে Routing তৈরি করা
যদি আপনি React ব্যবহার করেন, তবে React-Router হল একটি জনপ্রিয় রাউটিং প্যাকেজ, যেটি SPA রাউটিং পরিচালনার জন্য ব্যবহার করা হয়।
React-Router ইনস্টল করা:
প্রথমে React-Router প্যাকেজটি ইনস্টল করতে হবে:
npm install react-router-domReact Router দিয়ে Routing কনফিগারেশন:
React রাউটিং কনফিগার করতে নিচে একটি উদাহরণ দেওয়া হল:
import React from 'react'; import ReactDOM from 'react-dom'; import { BrowserRouter as Router, Route, Switch } from 'react-router-dom'; import HomePage from './HomePage'; // আপনার React কম্পোনেন্ট import AboutPage from './AboutPage'; import ContactPage from './ContactPage'; const App = () => ( <Router> <Switch> <Route exact path="/" component={HomePage} /> <Route path="/about" component={AboutPage} /> <Route path="/contact" component={ContactPage} /> </Switch> </Router> ); ReactDOM.render(<App />, document.getElementById('app'));এখানে, আমরা React Router এর
BrowserRouterএবংRouteব্যবহার করে বিভিন্ন রাউট তৈরি করেছি:- '/' - হোম পৃষ্ঠা
 - '/about' - অ্যাবাউট পৃষ্ঠা
 - '/contact' - কন্টাক্ট পৃষ্ঠা
 
SPA Routing এর মূল বৈশিষ্ট্য
- একটি HTML পৃষ্ঠার মধ্যে নেভিগেশন:
SPA রাউটিং পদ্ধতিতে অ্যাপ্লিকেশনটি একটি HTML পৃষ্ঠা লোড করে এবং প্রয়োজনীয় কন্টেন্ট ডাইনামিকভাবে আপডেট হয়। তাই পৃষ্ঠার মধ্যে নেভিগেশন করতে নতুন পৃষ্ঠা লোড হয় না। - রিয়েল-টাইম আপডেট:
SPA-তে ব্যবহারকারীর যেকোনো অ্যাকশন বা কন্টেন্ট পরিবর্তন তাত্ক্ষণিকভাবে প্রদর্শিত হয়, কারণ পৃষ্ঠাটি পুরোপুরি রি-লোড হয় না। - রাউটিং পদ্ধতি:
SPA-তে রাউটিং সাধারণত ক্লায়েন্ট সাইড চলে, যেখানে ব্রাউজার URL পরিবর্তন হলেও পুরো পৃষ্ঠা রি-লোড হয় না। শুধু প্রয়োজনীয় অংশ আপডেট হয়। 
সারাংশ
Meteor দিয়ে SPA Routing তৈরি করার জন্য আপনি FlowRouter বা React-Router ব্যবহার করতে পারেন। এগুলো SPA অ্যাপ্লিকেশনের জন্য খুবই কার্যকরী রাউটিং সমাধান প্রদান করে। FlowRouter Meteor-এ বিল্ট-ইন প্যাকেজ, যা সহজেই রাউটিং কনফিগার করতে সহায়তা করে, এবং React-Router React অ্যাপ্লিকেশনের জন্য অত্যন্ত জনপ্রিয়। SPA রাউটিং ডেভেলপমেন্টের গতি বাড়ায় এবং ব্যবহারকারীর অভিজ্ঞতাকে উন্নত করে।
Dynamic Routing
Dynamic Routing ওয়েব অ্যাপ্লিকেশন বা API তে এমন রাউটিং প্রক্রিয়া যা রাউটের অংশ হিসেবে ভ্যারিয়েবল বা পরিবর্তনশীল মান গ্রহণ করতে পারে। অর্থাৎ, রাউটের URL প্যাটার্নে ভিন্ন ভিন্ন ডেটা প্রদান করা যেতে পারে এবং সেই অনুযায়ী অ্যাপ্লিকেশন সাড়া দেয়।
Dynamic Routing ব্যবহার করলে একটি নির্দিষ্ট পাথের জন্য একাধিক ডেটা ভ্যালু প্রেরণ করা যায়, এবং সার্ভার বা ক্লায়েন্ট সাইড এই ডেটা অনুযায়ী উপযুক্ত রেসপন্স প্রদান করতে পারে।
উদাহরণ:
/users/:id— এখানে:idহল একটি প্যারামিটার যা ডাইনামিক রাউটিংয়ের জন্য ব্যবহৃত হয়। অর্থাৎ, আপনি/users/1,/users/2বা/users/any-idএর মতো URL ব্যবহার করতে পারেন এবং সার্ভার সেইidএর মান অনুযায়ী সাড়া দিবে।
URL Parameters
URL Parameters হল একটি URL এর অংশ যা মূল URL এর পরে ? চিহ্ন দিয়ে শুরু হয় এবং কীগুলির মান নির্দেশ করে। URL প্যারামিটারগুলি সার্ভারকে ক্লায়েন্টের থেকে অতিরিক্ত তথ্য প্রেরণ করতে ব্যবহৃত হয়, যা সার্ভারের জন্য প্রয়োজনীয় হতে পারে। URL প্যারামিটারগুলি query strings হিসেবেও পরিচিত।
উদাহরণ:
https://example.com/products?id=123&category=shoes
এখানেidএবংcategoryহল প্যারামিটার, এবং123এবংshoesতাদের মান।
Types of URL Parameters
- Path Parameters (Dynamic Parameters):
- URL এর পাথ অংশে (Path) থাকা পরিবর্তনশীল মানকে Path Parameters বলা হয়। এগুলি রাউটিং প্যাটার্নে ব্যবহৃত হয়, যেমন 
/users/:id। - উদাহরণ:
/posts/:postId- এখানে:postIdহল একটি Path Parameter। 
 - URL এর পাথ অংশে (Path) থাকা পরিবর্তনশীল মানকে Path Parameters বলা হয়। এগুলি রাউটিং প্যাটার্নে ব্যবহৃত হয়, যেমন 
 - Query Parameters:
- URL এর শেষে 
?দিয়ে শুরু হয় এবং একাধিক কিপেয়ার ভ্যালু প্যারামিটার হিসেবে যুক্ত করা হয়। সাধারণত filtering, pagination ইত্যাদি জন্য ব্যবহৃত হয়। - উদাহরণ:
https://example.com/search?q=product&page=2
এখানেqএবংpageহল query parameters। 
 - URL এর শেষে 
 
Dynamic Routing এবং URL Parameters এর ব্যবহার
Client-Side Routing (React, Angular, Vue.js)
- React Router (React Example):
React অ্যাপ্লিকেশন গুলিতে, Dynamic Routing এবং URL Parameters ব্যবহৃত হয়react-router-domলাইব্রেরির মাধ্যমে।:paramএর মাধ্যমে ডাইনামিক রাউটিং এবং URL প্যারামিটার গ্রহণ করা যায়। 
// React Router Example
import { BrowserRouter as Router, Route, useParams } from "react-router-dom";
function PostDetail() {
    let { postId } = useParams(); // Retrieve URL parameter 'postId'
    return <h2>Post ID: {postId}</h2>;
}
function App() {
    return (
        <Router>
            <Route path="/post/:postId" component={PostDetail} />
        </Router>
    );
}
Server-Side Routing (Node.js with Express)
- Node.js Express Example: Express.js-এ Dynamic Routing এবং URL Parameters ব্যবহার করা যায়। Express.js-এ 
req.paramsএবংreq.queryএর মাধ্যমে প্যারামিটারগুলো এক্সেস করা যায়। 
// Express.js Example
const express = require('express');
const app = express();
// Dynamic Routing with Path Parameter
app.get('/users/:userId', (req, res) => {
    const userId = req.params.userId; // Path parameter
    res.send(`User ID: ${userId}`);
});
// Query Parameters
app.get('/search', (req, res) => {
    const searchQuery = req.query.q; // Query parameter
    res.send(`Search Query: ${searchQuery}`);
});
app.listen(3000, () => console.log('Server running on port 3000'));
URL Parameters with Query String
Query Parameters সাধারণত ব্যবহারকারীর নির্বাচিত ডেটা ফিল্টার বা সার্চ কন্ডিশন ফিল্টার করতে ব্যবহৃত হয়। উদাহরণস্বরূপ, একটি সার্চ পেজে ইউজারের দেওয়া কিওয়ার্ড অনুসারে সার্চ করা:
// Express.js with Query String Example
app.get('/products', (req, res) => {
    const { category, price } = req.query; // Get 'category' and 'price' from query string
    res.send(`Products in ${category} category under ${price} price`);
});
এখানে URL হবে:https://example.com/products?category=shoes&price=50
সারাংশ
Dynamic Routing এবং URL Parameters ওয়েব অ্যাপ্লিকেশন বা API ডেভেলপমেন্টে গুরুত্বপূর্ণ ভূমিকা পালন করে। Dynamic Routing এর মাধ্যমে URL পাথের অংশে পরিবর্তনশীল ডেটা গ্রহণ করা যায়, যা অ্যাপ্লিকেশনকে আরো নমনীয় এবং ডায়নামিক করে তোলে। অন্যদিকে, URL Parameters (Path এবং Query) সার্ভার বা ক্লায়েন্টের সাথে অতিরিক্ত তথ্য ভাগ করতে ব্যবহৃত হয়, যা বিশেষভাবে সার্চ, ফিল্টার, পেজিনেশন ইত্যাদি ক্ষেত্রে কার্যকর।
Route Guards কি?
Route Guards হলো এমন একটি প্রযুক্তি বা কৌশল, যা ব্যবহার করে আপনি একটি ওয়েব অ্যাপ্লিকেশনে ব্যবহারকারীর বিভিন্ন রুট (পথ) বা পৃষ্ঠায় অ্যাক্সেস নিয়ন্ত্রণ করতে পারেন। এটি সাধারণত রাউটিং সিস্টেম বা রাউটিং লাইব্রেরি দ্বারা নির্ধারিত হয় এবং মূলত অথেন্টিকেশন (Authentication) এবং অথোরাইজেশন (Authorization) এর উপর ভিত্তি করে কাজ করে।
Route Guards ব্যবহারকারীদের সুরক্ষিত পৃষ্ঠা বা রুট এ প্রবেশ করতে বাধা দেয় যদি তারা সঠিকভাবে লগইন না থাকে বা তাদের প্রয়োজনীয় অনুমতি না থাকে। এটি মূলত Angular, React, এবং অন্যান্য ফ্রেমওয়ার্কে ব্যবহৃত হয়।
Route Guards এর কাজ:
- Authentication Guard: ব্যবহারকারী যদি সঠিকভাবে লগইন না থাকে, তবে তাকে নির্দিষ্ট পৃষ্ঠায় প্রবেশ করতে দেওয়া হয় না।
 - Authorization Guard: ব্যবহারকারী যদি নির্দিষ্ট ভূমিকা বা অনুমতি না থাকে, তবে তারা নির্দিষ্ট রুটে প্রবেশ করতে পারে না। যেমন, একজন সাধারণ ব্যবহারকারী অ্যাডমিন পৃষ্ঠায় প্রবেশ করতে পারবে না।
 
Angular-এ Route Guards ব্যবহার
Angular ফ্রেমওয়ার্কে Route Guards ব্যবহার করা খুবই সহজ। Angular-এ চারটি প্রকারের Route Guard থাকে:
- CanActivate: রুটের আগে ব্যবহারকারী অ্যাক্সেস করতে পারে কিনা চেক করে।
 - CanActivateChild: যদি রুটের জন্য চাইল্ড রুট থাকে, তাহলে এটি চেক করবে।
 - CanDeactivate: রুটের আগেই ব্যবহারকারী কি একটি নির্দিষ্ট পৃষ্ঠা ত্যাগ করতে পারে তা চেক করে।
 - CanLoad: ব্যবহারকারী যদি রুটটি লোড করতে পারে কিনা চেক করে।
 
CanActivate উদাহরণ:
// auth.guard.ts (Route Guard)
import { Injectable } from '@angular/core';
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router';
import { AuthService } from './auth.service';
@Injectable({
  providedIn: 'root'
})
export class AuthGuard implements CanActivate {
  constructor(private authService: AuthService, private router: Router) {}
  canActivate(
    next: ActivatedRouteSnapshot,
    state: RouterStateSnapshot): boolean {
    if (this.authService.isLoggedIn()) {
      return true;
    } else {
      this.router.navigate(['/login']);
      return false;
    }
  }
}
এখানে, AuthGuard চেক করে ব্যবহারকারী লগইন করেছে কিনা। যদি না থাকে, তবে /login পৃষ্ঠায় রিডাইরেক্ট করা হয়।
Access Control কি?
Access Control হলো একটি প্রক্রিয়া, যা ব্যবহারকারীদের তাদের ভূমিকা (role) এবং অনুমতির (permission) উপর ভিত্তি করে অ্যাপ্লিকেশনে বা সিস্টেমে অ্যাক্সেস নিয়ন্ত্রণ করে। এটি সুনির্দিষ্ট ডেটা বা ফিচারগুলিতে অ্যাক্সেস দেওয়া বা সীমাবদ্ধ করার জন্য ব্যবহৃত হয়।
Access Control সাধারণত দুটি ধরনের হয়:
- Role-Based Access Control (RBAC): ব্যবহারকারীর ভূমিকা অনুযায়ী অ্যাক্সেস নিয়ন্ত্রণ করা হয়। যেমন, একজন Admin ব্যবহারকারী সব কিছু দেখতে এবং সম্পাদনা করতে পারে, কিন্তু একজন সাধারণ ব্যবহারকারী শুধুমাত্র তাদের নিজস্ব ডেটা দেখতে পারে।
 - Attribute-Based Access Control (ABAC): এখানে, অ্যাক্সেসের সিদ্ধান্ত আরও বিস্তারিত এক্সটেনশন হিসেবে বিভিন্ন প্যারামিটার বা অ্যাট্রিবিউটের উপর ভিত্তি করে নেওয়া হয়, যেমন সময়, স্থান, অথবা অন্য কোনো ডেটা।
 
Access Control এর সুবিধা:
- Security (নিরাপত্তা):
শুধুমাত্র অনুমোদিত ব্যবহারকারীরা সিস্টেমের সংবেদনশীল বা গুরুত্বপূর্ণ তথ্য অ্যাক্সেস করতে পারে। - Flexibility (সুবিধা):
ভিন্ন ভিন্ন ধরনের ব্যবহারকারীর জন্য ভিন্ন ভিন্ন অ্যাক্সেস স্তর নির্ধারণ করা সম্ভব। - Audit and Monitoring (অডিট এবং মনিটরিং):
কিভাবে অ্যাক্সেস হচ্ছে এবং কোন ব্যবহারকারী কিভাবে ডেটা বা ফিচার ব্যবহার করছে, তা ট্র্যাক করা সম্ভব। 
Role-Based Access Control (RBAC) উদাহরণ
ধরা যাক, একটি অ্যাপ্লিকেশন তৈরি করা হচ্ছে যেখানে Admin এবং User দুটি ভূমিকা থাকবে।
// Simple Access Control Example
const roles = {
  admin: ['create', 'read', 'update', 'delete'],
  user: ['read']
};
function canAccess(role, action) {
  if (roles[role] && roles[role].includes(action)) {
    return true;
  }
  return false;
}
// উদাহরণ
console.log(canAccess('admin', 'create'));  // true
console.log(canAccess('user', 'delete'));  // false
এখানে, Admin ভূমিকা একটি পূর্ণাঙ্গ অ্যাক্সেস পায় (create, read, update, delete), তবে User শুধুমাত্র read অ্যাক্সেস পায়।
সারাংশ
Route Guards এবং Access Control দুইটি গুরুত্বপূর্ণ কৌশল যা ওয়েব অ্যাপ্লিকেশন নিরাপত্তা এবং ব্যবহারের অভিজ্ঞতা উন্নত করতে ব্যবহৃত হয়। Route Guards অ্যাপ্লিকেশন রাউটিং সিস্টেমে ব্যবহারকারীর অ্যাক্সেস নিয়ন্ত্রণ করে, যেখানে Access Control ব্যবহারকারীর ভূমিকা এবং অনুমতি অনুযায়ী সিস্টেমের বিভিন্ন অংশে অ্যাক্সেস সীমিত করে। এই দুটি কৌশল একসাথে ব্যবহার করে, আপনি একটি নিরাপদ এবং কার্যকর অ্যাপ্লিকেশন তৈরি করতে পারেন।
Read more